package threadProblem;

import java.util.Random;

/*
 * 编写代码, 实现多线程数组求和
 * 
 * 给定一个很长的数组 (长度 1000w), 通过随机数的方式生成 1-100 之间的整数. 
 * 实现代码, 能够创建两个线程, 对这个数组的所有元素求和. 
 * 其中线程1 计算偶数下标元素的和, 线程2 计算奇数下标元素的和. 
 * 最终再汇总两个和, 进行相加
 * 记录程序的执行时间. 
*/
public class ArraySum{
    public static int sum = 0;
    public static int sum1 = 0;
    public static int sum2 = 0;

    public static final int size = 10000000;
    public static void main(String[] args) throws InterruptedException {
        //创建大小为10000000的整形数组
        int[] nums = new int[size];
        //创建随机数对象
        Random random = new Random(System.currentTimeMillis());
        //随机生产10000000个整数
        for(int i = 0; i < size; i++){
            nums[i] = random.nextInt(100) + 1;
        }
        //线程1 计算偶数位之和
        Thread t1 = new Thread(()->{
            for(int i = 1; i < size; i += 2){
                sum1 += nums[i];
            }
        });
        //线程2 计算奇数位之和
        Thread t2 = new Thread(()->{
            for(int i = 0; i < size; i += 2){
                sum2 += nums[i];
            }
        });

        //记录开始执行的时间
        long time1 = System.currentTimeMillis();
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        sum = sum1 + sum2;
        //记录执行完的时间
        long time2 = System.currentTimeMillis();

        System.out.println("求和花费的时间是" + (time2 - time1) + "毫秒，和为：" + sum);
    }
}
